Backblaze B2 + Cloudflare
利点
理由 (Backblaze 社員の Reddit 投稿) 通信設備会社 (?) が法外な金額を請求してくるのを、 Cloudflare 経由だと回避できるから
2021/1 時点ではやめるつもりは無いらしい
基本
f00x.backblazeb2.com に CNAME するだけ
Transform Rules を使う場合、 Page Rules の設定は不要
パス問題
100,000 requests/day, 1000 requests/min
余程のことが無ければ制限に達しない…と言えるか微妙な数
有料は最低 $5/月
1つのサブドメインでB2から配信
URL Rewrite (URL リライト) で、 Path の置換ルールを concat("/file/<bucket-name>", http.request.uri.path) とする
https://i.imgur.com/353xj76.png
これで、 https://f00x.backblaze.b2.com/file/<bucket-name>/<path> = https://media-test.heguro.com/<path> になる
無限ループ回避のため、 URL Path に /file/<bucket-name>/ を含まないという条件を追加したほうがよいかも
「/file/<bucket-name> から始まらない」 という条件にするのが一番だけど、選択肢にない
式を手入力モードにして、全体を () で囲んでから and not starts_with(http.request.uri.path, "/file/<bucket-name>/") をつける
2つ以上のサブドメインでそれぞれ別のコンテンツを配信
Free プランだと URL とヘッダの置換合わせて 2 つまで
1 つの Registrable Domain (Zone) で最高 2 つの bucket しか使えない
bucket 内にホスト名のディレクトリを作ることで、複数ホストに対応させることは可能
concat("/file/<bucket-name>/", http.host, http.request.uri.path) とする
https://i.imgur.com/f5pXlWz.png
https://f00x.backblazeb2.com/file/<bucket-name>/<hostname>/<path> = https://<hostname>/<path>
bucket 名に . を使えないので、 1 つのルールで複数の bucket に振り分けることは出来ない
http.host から . を消せる regex_replace や remove_bytes は Business プラン以上でしか使えない
置換ルールの部分では eq, and などの演算子が使えない
三項演算子的なこともできない
ヘッダ置換機能で Host は弄れなかった
なんでこんな面倒なことをする必要があるのか
注意
一度これを使ってしまうと Cloudflare を外す選択ができなくなる
Cloudflare を外す (プロキシを off にする) と URL が変わるから余程のことが無い限り外せない
Cloudflare に大規模障害が発生しても妥協できる用途に使う
http でアクセスして https にリダイレクトされた時、 /file/<bucket-name>/ つきの URL になる
Page Rulesかドメイン全体でAlways As HTTPSを有効にして、 Cloudflare側でリダイレクトさせる
URL Rewrite よりも先にリダイレクト処理されるっぽい
できない (したくない) 場合、 Workers で https かつ /file/<bucket-name/<hostname>/ を取り除いた URL にリダイレクトするやつを作って http:// に適用する
Web サイトホスティング
ここまで来たらもう Backblaze B2 だけで静的 Web サイト運用してみたい
1 年に 1 回ドメインに金を払うだけ
月額は 0 かそれに近くなる
WinSCP で Amazon S3 として接続したら FTP っぽいこともできる
/ から /index.html へのリダイレクトがないので厳しい
それ以外にも、 .htaccess でやるようなことが一切できない
.html や .txt ファイルの Content-Type に ; charset=utf-8 をつけるなど
URL直打ちでもアクセスできるよう、Workers で / へのアクセスを /index.html に置き換える必要がある
それか、 /top.html などにリダイレクトする
Workersのリクエスト数を減らすにはこっちの方がいいかも
Workers は Page Rules や Transform Rules に比べて個数に余裕があり、割となんでもできる
できるだけリクエスト数制限に達しないよう、最低限の適用に留めたい
ルートに対してのみ適用し、ルート以外は index.html を使わずそれっぽいファイル名 ( top.html など) を使うなど、 Workers を使わなくても何とかなるよう運用する
https://heguro.com をこれでやってみた
割といける
code: Backblaze 独自のヘッダが載る
x-bz-content-sha1: 11f069cd88f72c1402e022c939b0c283d8bde946
x-bz-file-id: 4_z4a5fb1749e34059675440916_f102d69833307ed79_d20211007_m012117_c002_v0001160_t0010
x-bz-file-name: heguro.com/index.html
x-bz-info-src_last_modified_millis: 1590751056000
x-bz-upload-timestamp: 1633569677000